#函数是为了方便维护
import string


def string_letter(s):
    '''此函数用于统计字符串中的所有大写字母的个数'''
    count=0
    for i in s:
        if i in string.ascii_uppercase:
            count+=1
    return count

s="AAAAAsssss"
print(string_letter(s))
help(string_letter) #打印出函数的使用

import random
import time
def print_time():
    star_time=time.time()
    for i in range(1000):
        random.random()*random.random()
    end_time=time.time()
    return end_time-star_time


#1、有参数函数---必备参数
#参数必传的，不能多也不能少，一一对应

def your_info(name,age,phone):
    print("name"+str(name)+"age"+str(age)+"phone"+str(phone))
    return

your_info("wxy",18,1883883)

#函数的参数少可变类型，那么函数内的操作，会体现在函数外
a=[]
def func(s):
    s.append(100)

func(a)
print(a)

#如果不想影响函数外的参数，则可新声明一个变量赋值
#可变：列表、集合、字典
#不可变：元组、集合、字典
import copy
x=[]
b=copy.deepcopy(x)
def func(s):
    s.append(100)
    print(s)

func(b)
print(x)

#参数设置默认值，默认参数如果是可变类型，那么所有的默认值调用都会操作内存中的同一个变量值
#建议不要使用可变类型的值作为默认值
def prin_star(s=5):
    for i in range(s):
        print("*"*10)
prin_star(4)


#函数返回值，如果想返回多个值，那么把它放到一个容器就可以了
def get_sth(a,b):
    return a,b
#返回值是一个元组，可以通过下标取值
print(get_sth(1,2)[0])

#举例，写一个函数，参数传入一个字符串，统计一下数字个数，把这些数字排重后，个数和出现的数字，同时返回给我
import string
def num(s):
    x=[]
    if not isinstance(s,str):
        return None
    for i in s:
        if i in set(string.digits) and i not in x:
            x.append(i)
    nums=len(x)
    return nums,x
print(num("22ddd67882xxee34231")[1])
print(num(11))